/* **************************************************************************/
/*COPYRIGHT CCWIN-IN ALL RIGHTS RESERVED. THIS IS AN UNPUBLISHED WORK.      */
/*V8:ConvertMode=Report                                                     */
/*V8:WebEnabled=Yes                                                         */
/*V8:RunMode=Character,Windows                                              */
/*EXTRACTING DATA FROM MFG/PRO                                              */
/****************************************************************************/
/* PROCEDURE NAME        : xxitemdetexptapi.p                               */
/* PROCEDURE TYPE        : API export Process                               */
/* DESCRIPTION           : Item detail export Process                       */
/*                                                                          */     
/* INCLUDE FILES         :                                                  */
/* CALLED BY             :                                                  */
/* CALLED PROCEDURES     :                                                  */
/****************************************************************************/
/* CREATED BY            : Gaoyan                                 2-APR-24  */
/****************************************************************************/ 
/****************************************************************************/
/****************************************************************************/

{us/mf/mfdtitle.i}
{us/bbi/gplabel.i}
{us/wb/wbrp01.i}
{xxjson.i}
{xxcimload.i}

&SCOPED-DEFINE TimeStamp1 substring(string(year(today), "9999"),3) + string(month(today), "99") + string(day(today), "99")
&SCOPED-DEFINE TimeStamp2 substring(string(time, "HH:MM:SS"), 1, 2) + substring(string(time, "HH:MM:SS"), 4, 2) + substring(string(time, "HH:MM:SS"), 7, 2)

define input parameter vc_inputjson             as character format "x(60)" no-undo.
define input parameter vc_outputjson            as character format "x(60)" no-undo.
define input parameter vc_import                as logical  no-undo.


DEFINE VARIABLE li_access           AS    INTEGER                       NO-UNDO.
define variable l_file                       as character format "x(40)" no-undo.
define variable l_line                       as character   no-undo.
define variable lvi_row_id                   as decimal     no-undo.
define variable v_import                     as logical     init   "no"      no-undo.
define variable v_site                       like si_site   no-undo.

define variable l_error                      as character      no-undo.
define stream f_log.
define stream f_cim.
define variable v_quote               as character initial """"   no-undo.
define variable v_default             as character initial "-"    no-undo.
define variable v_space               as character initial " "    no-undo.
define variable v_log                 as character                no-undo.
define variable v_cim                 as character                no-undo.
define variable v_fline               as character                no-undo.
define variable v_errorstatus         as logical                  no-undo.
define variable v_toterrorstatus      as logical initial yes      no-undo.
define variable v_errstring           as character                no-undo.
define variable v_status              as character                no-undo.

define variable v_entity              like si_entity              no-undo.
define variable v_ee                  as logic                    no-undo.

define variable vi_filecount          as integer                  no-undo.
define variable vc_filename           as character                no-undo.
define variable vc_topath             as character                no-undo.
define variable v_runproagram        as character                no-undo.
define variable vc_traceid            as character                no-undo.


define variable vc_partfrom            as character                no-undo.
define variable vc_partto            as character                no-undo.
define variable vd_effdate            as date                no-undo.




 define temp-table ttSearchCondition no-undo

       field  tt_part_from    like pt_part
       field  tt_part_to      like pt_part
       field  tt_date         as   date.


 define temp-table ttpsmstr no-undo
       field ps_domain       like ps_mstr.ps_domain   
       field ps_par          like ps_mstr.ps_par     
       field ps_comp         like ps_mstr.ps_comp    
       field ps_ref          like ps_mstr.ps_ref     
       field ps_qty_per      like ps_mstr.ps_qty_per 
       field ps_start        like ps_mstr.ps_start   
       field ps_end          like ps_mstr.ps_end     
       field ps_ps_code      like ps_mstr.ps_ps_code 
       field ps_rmks         like ps_mstr.ps_rmks    
       field ps_scrp_pct     like ps_mstr.ps_scrp_pct
       field ps_lt_off       like ps_mstr.ps_lt_off  
       field ps_op           like ps_mstr.ps_op      
       field ps_item_no      like ps_mstr.ps_item_no 
       field ps_fcst_pct     like ps_mstr.ps_fcst_pct
       field ps_group        like ps_mstr.ps_group   
       field ps_process      like ps_mstr.ps_process 
       field ps_type         as   character
       field ps_traceid       as   character  
       field ps_dataid       as   character  

       index parcomp ps_domain ps_par ps_comp
       index ptaskid ps_traceid.

       
   DEFINE DATASET dsBommaster FOR ttpsmstr.
   
   hresult = dataset dsBommaster:HANDLE.    
            

      
   DEFINE DATASET dsSearchCondition FOR ttSearchCondition.

   hdataset = dataset dsSearchCondition:HANDLE.   
            
                

  
mainloop:
repeat on error undo mainloop, leave mainloop:
  
 
   /* Output and Batch Input */
   
   {us/xx/xxworkpath_e.i &outbound=YES &inbound=no &archive=YES}

assign m_outpath     = m_outpath + "bm/"
       m_archpath    = m_archpath + "bm/"
       m_successpath = m_successpath + "bm/"
       m_errorpath   = m_errorpath + "bm/"
       m_workpath    = m_workpath + "bm/".


   empty temp-table ttpsmstr.
   
   
   /* Load SEARCH conditions from JSON  */ 
   
   vc_outputjson = replace(vc_inputjson,".json",".run.out.json").   
   run loadjsonfile(input vc_inputjson,
                    input vc_outputjson,
                    output vl_RetOK).
                    
  if vl_RetOK then do:

   for each ttSearchCondition. 
       
      if ttSearchCondition.tt_part_to = "" then vc_partto = hi_char .
      else vc_partto = ttSearchCondition.tt_part_to.
      vc_partfrom = ttSearchCondition.tt_part_from.
       vd_effdate = ttSearchCondition.tt_date.
      
      
    end . /* for each ttSearchCondition.  */
    
    if vd_effdate = ? then 
    do:
     for each ps_mstr no-lock where ps_mstr.ps_domain = global_domain
                                and ps_mstr.ps_par >= vc_partfrom                      
                                and ps_mstr.ps_par <= vc_partto
                                .     
              create ttpsmstr.               
              assign
                     ttpsmstr.ps_domain       =  ps_mstr.ps_domain   
                     ttpsmstr.ps_par          =  ps_mstr.ps_par     
                     ttpsmstr.ps_comp         =  ps_mstr.ps_comp    
                     ttpsmstr.ps_ref          =  ps_mstr.ps_ref     
                     ttpsmstr.ps_qty_per      =  ps_mstr.ps_qty_per 
                     ttpsmstr.ps_start        =  ps_mstr.ps_start   
                     ttpsmstr.ps_end          =  ps_mstr.ps_end     
                     ttpsmstr.ps_ps_code      =  ps_mstr.ps_ps_code 
                     ttpsmstr.ps_rmks         =  ps_mstr.ps_rmks    
                     ttpsmstr.ps_scrp_pct     =  ps_mstr.ps_scrp_pct
                     ttpsmstr.ps_lt_off       =  ps_mstr.ps_lt_off  
                     ttpsmstr.ps_op           =  ps_mstr.ps_op      
                     ttpsmstr.ps_item_no      =  ps_mstr.ps_item_no 
                     ttpsmstr.ps_fcst_pct     =  ps_mstr.ps_fcst_pct
                     ttpsmstr.ps_group        =  ps_mstr.ps_group   
                     ttpsmstr.ps_process      =  ps_mstr.ps_process 
                     .
 
     
          
     end. /* for each ps_mstr */
    
    end. /*  if vd_effdate = ? then  */
    
    else do:
    
    
     for each ps_mstr no-lock where ps_mstr.ps_domain = global_domain
                                and ps_mstr.ps_par >= vc_partfrom                       
                                and ps_mstr.ps_par <= vc_partto
                                and (ps_mstr.ps_start <= vd_effdate or 
                                     ps_mstr.ps_start = ?)
                                and (ps_mstr.ps_end >= vd_effdate or
                                     ps_mstr.ps_end = ?)

                                .     
              create ttpsmstr.               
              assign
                     ttpsmstr.ps_domain       =  ps_mstr.ps_domain   
                     ttpsmstr.ps_par          =  ps_mstr.ps_par     
                     ttpsmstr.ps_comp         =  ps_mstr.ps_comp    
                     ttpsmstr.ps_ref          =  ps_mstr.ps_ref     
                     ttpsmstr.ps_qty_per      =  ps_mstr.ps_qty_per 
                     ttpsmstr.ps_start        =  ps_mstr.ps_start   
                     ttpsmstr.ps_end          =  ps_mstr.ps_end     
                     ttpsmstr.ps_ps_code      =  ps_mstr.ps_ps_code 
                     ttpsmstr.ps_rmks         =  ps_mstr.ps_rmks    
                     ttpsmstr.ps_scrp_pct     =  ps_mstr.ps_scrp_pct
                     ttpsmstr.ps_lt_off       =  ps_mstr.ps_lt_off  
                     ttpsmstr.ps_op           =  ps_mstr.ps_op      
                     ttpsmstr.ps_item_no      =  ps_mstr.ps_item_no 
                     ttpsmstr.ps_fcst_pct     =  ps_mstr.ps_fcst_pct
                     ttpsmstr.ps_group        =  ps_mstr.ps_group   
                     ttpsmstr.ps_process      =  ps_mstr.ps_process 
                     .
 
     
          
     end. /* for each ps_mstr */

    end. /* else do */

  end.  /* if vl_RetOK then do: */ 
                    
         /* Create output json */                   
         run writejsonfile(input hresult,
                  input vc_outputjson,
                  input "FILE",
                  input True,
                  input "UTF-8",
                  output vl_RetOK,
                  output vc_errorstring).
                  
       do vi_filecount = 1 to 5:
          /* when success move cim log file to archive directory  */
          /* when failed move cim log file to error directory  */   
          /*  move status json file to out directory for API return */   
          /* when success move previous step .p and json file to archive directory  */
          /* when failed move previous step .p and json file to error directory  */       
          case vi_filecount:
      
          when 1 then
          assign vc_filename = replace(vc_inputjson,".json",".p")
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 2 then
          assign vc_filename = vc_inputjson
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 3 then
          assign vc_filename = replace(vc_inputjson,".json",".dat")
                 vc_topath   = if v_errorstatus then m_errorpath else m_archpath. 
          when 4 then
          assign vc_filename = replace(vc_inputjson,".json",".run.log")
                 vc_topath   = m_outpath.
          when 5 then
          assign vc_filename = replace(vc_inputjson,".json",".run.out.json")
                 vc_topath   =  m_outpath.
          end case.
          
         if vl_RetOK then 
         put unformatted vc_filename " " skip
         vc_topath " " skip 
         vi_filecount skip.
     
        
          
          run cimfilehandle(input vc_filename,
                            input vc_topath,
                            input no ).                 
                   
          
     
       end.       /* do vi_filecount = 1 to 5: */        
      
   
   
   leave.
end. /* repeat on error undo mainloop, leave mainloop: */
